It is a goal of many enterprise distributed systems to provide 24×7 availability (24 hours, 7 days a week) because unplanned downtime in such systems is likely to result in lost custom/business. For example, if a bank's ATM client loses contact with the bank server system such that customers cannot obtain cash, the bank is likely to lose customers. Similarly if an insurance company operative cannot respond to a customer enquiry because the operative's client workstation has lost contact with the insurance company server system, the insurance company is likely to lose customers. As a result an enterprise distributed system that requires 24×7 availability needs to be able to deal with failures such as the temporary unavailability of a server or a resource such as a database, which is accessed via a server.
For example, if a client makes a request for a target service in a server to perform an operation and the requested operation fails, the client has several options. For example it may: re-issue the request to the same or an equivalent target service to perform the operation; fail and return an error to the user; or ignore the error. The option selected may depend on what permanent effects the failed operation had. For example, if the failed operation succeeded to the point of making permanent updates to a database, the client should not re-invoke the request. Alternatively if the failed operation is idempotent the client may safely re-issue the request anyway since multiple invocations of an idempotent operation will always yield the same result.
As a result, for client/server applications which can potentially cross business boundaries, it is an advantage if the client knows, or receives, for example, an indication of whether or not operations of a target service are idempotent. Such knowledge can result if idempotency is part of the contract between the target service and client.
BEA's WebLogic Server provides one solution to this problem for its J2EE application server (WebLogic Server is a registered trade mark of BEA Systems Inc. and J2EE is a trade mark of Sun Microsystems Inc.). This solution enables a target service to be statically defined (labelled) as providing operations all of which are idempotent. This information is then made available to the client so that it can obtain this information before sending a request.
However it is not always desirable for the idempotency of the operations of a target service to be statically defined. For example, a target service may wish to process a request for an operation differently depending on the capability and requirements of the invoking client, such that an operation may be idempotent for one type of client and not for another. Further a given service may provide support for many different operations where some are idempotent and others are not.